package cn.dlc.com.stack;

import com.sun.org.apache.bcel.internal.generic.POP;

/**
 * @author 邓立川
 * @date 2021/3/21 15:30
 * @desc 当前类的描述信息
 */
public class StackTest {

    public static void main(String[] args) {

        System.out.println(isMatch("56s4d4f65sf(sdfs(sdfs(sdfs)sdfs(sdf)sdfs)sdfsd)"));

        String[] arr = new String[]{"2","3","4","-","+"};

        int calculate = calculate(arr);
        System.out.println(calculate);
    }

    /**
     * 判断字符串中括号是否匹配
     * @param str
     * @return
     */
    public static boolean isMatch(String str){

        // 存放左边括号
        Stack<String> chars = new Stack<>();

        for (int i = 0; i < str.length(); i++) {
            String currChar = str.charAt(i) + "";
            if("(".equals(currChar)) {
                // 如果是左边括号。
                chars.push(currChar);
            } else if(")".equals(currChar)) {
                // 右边括号，出栈
                String pop = chars.pop();
                if(pop == null) {
                    // 没有元素了，表示不匹配
                    return false;
                }
            }

        }
        // 遍历完了
        if(chars.size() > 0) {
            // 还有括号在里面
            return false;
        }

        return true;
    }

    /**
     *
     * @return
     */
    public static int calculate(String[] arr){
        // 定义一个栈，用来存储操作数
        Stack<Integer> numStack = new Stack<>();

        // 遍历数组，
        for (int i = 0; i < arr.length; i++) {

            Integer num1;
            Integer num2;
            Integer result;

            if("+".equals(arr[i])){
                // 从里面拿两个数出来
                num1 = numStack.pop();
                num2 = numStack.pop();
                result = num2 + num1;
                // 重新塞进去
                numStack.push(result);

            } else if("-".equals(arr[i])){
                // 从里面拿两个数出来
                num1 = numStack.pop();
                num2 = numStack.pop();
                result = num2 - num1;

                // 重新塞进去
                numStack.push(result);

            } else if("*".equals(arr[i])){
                // 从里面拿两个数出来
                num1 = numStack.pop();
                num2 = numStack.pop();
                result = num2 * num1;

                // 重新塞进去
                numStack.push(result);

            } else if("/".equals(arr[i])){
                // 从里面拿两个数出来
                num1 = numStack.pop();
                num2 = numStack.pop();
                result = num2 / num1;

                // 重新塞进去
                numStack.push(result);
            } else{
                numStack.push(Integer.parseInt(arr[i]));
            }
        }

        // 最终剩下的就是结果
        Integer result = numStack.pop();

        return result;
    }


}
